package com.scse.bms.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.scse.bms.domain.BookCaseVO;
import com.scse.bms.domain.BookVO;
import com.scse.bms.entity.BookDO;
import com.scse.bms.entity.EBookDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Title: BookMapper
 * @Author: 吴赠禹
 * @Date: 2021/1/11 15:46
 * @Version: 1.0
 * @Description: book dao
 */

@Repository
@Mapper
public interface BookMapper {

    /**
     * 插入电子书
     *
     * @param book
     * @return
     */
    int insertEBook(EBookDO book);


    /**
     * 插入图书
     *
     * @param book
     * @return
     */
    int insertBook(BookDO book);

    /**
     * 查询所有图书
     *
     * @return
     */
    List<BookVO> selectAll(@Param("page") int page, @Param("limit") int limit);

    /**
     * 获取所有图书的数量
     *
     * @return
     */
    int countAll();


    /**
     * 获取图书信息
     *
     * @param id
     * @return
     */
    BookDO selectById(@Param("id") Integer id);

    /**
     * 根据主键更新
     *
     * @param book
     * @return
     */
    int updateById(BookDO book);


    /**
     * 删除图书记录
     *
     * @param book
     * @return
     */
    int deleteById(BookDO book);


    /**
     * 条件查询统计记录数
     *
     * @return
     */
    int countByCase(BookCaseVO book);


    /**
     * 条件分页查询
     *
     * @param book
     * @return
     */
    List<BookVO> getAllByCase(BookCaseVO book);


    /**
     * 获取全部符合条件的记录（标题，中图分类，主题，推荐状态）
     *
     * @param book
     * @return
     */
    List<BookVO> countAllByCase(BookCaseVO book);


    /**
     * 获取推荐的图书
     *
     * @return
     */
    List<BookVO> getRecommended(int count);


    /**
     * 获取最新上架的电子书
     *
     * @param count
     * @return
     */
    List<BookVO> getRecentBook(int count);


    /**
     * 获取作者和书籍等信息用于前端展示
     */
    List<BookVO> getAuthor(int count);


    /**
     * 按分类获取图书信息（主题）
     */
    IPage<BookDO> selectAllByThemeId(Page<?> page, Integer themeId);


    /**
     * 按书名或作者模糊查询
     */
    IPage<BookVO> selectAllByTitleOrAuthor(Page<?> page, String keyword);


    /**
     * 同主题新书推荐（用于相关推荐）
     */
    List<BookVO> selectRecentBookByThemeId(@Param("themeId") Integer themeId, @Param("limit") Integer limit);


    /**
     * 获取最新上架电子书（乱序，最多取15条） TODO 不显示未分类的图书
     */
    List<BookVO> selectBookByUploadTimeWithRand(Integer limit);


    /**
     * 访问最多的图书
     */
    List<BookVO> selectBookWhichMostVisited(Integer limit);


    /**
     * 下载最多的图书
     */
    List<BookVO> selectBookWhichMostDownload(Integer limit);





}
